package estadistec.grafico;

import java.awt.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.*;

import estadistec.excepciones.Excepcion;
import estadistec.logica.SuperGestor;

import estadistec.logica.LEscritorio;
import estadistec.logica.tabla.LTablaNormal;
import estadistec.logica.tabla.TipoTabla;


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


import java.beans.PropertyChangeEvent;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;

/**
 * @author julatec
 * @author pcorrales
 */

 /**
 * Clase ventana principal del proyecto estadistec, la cual contiene el 
 * menu, barra de menu, el escritorio de trabajo la barra de escritorio.
 */
public final class EstadistecVentana extends JFrame implements ConstantesGraficas, InterfazUsuario,VetoableChangeListener  {
	
	/**
	 * Escritorio donde se trabaja.
	 *
	 * @todo Debe ser un Hashtable de escritorios.
	 */
	protected GEscritorio _gEscritorio;

	/** 
	 * SuperGestor.
	 */
	private SuperGestor _superGestor;
	

	/**
	 * Barra  de herramientas, la cual nos permite un acceso mas rapido 
	 * sobre algunos de las opciones de menu mas necesarias en el uso de la 
	 * aplicacion.
	 */
	protected  BarraHerramientas barraHerramientas;

	/**
	 * Barra de escritorio la cual nos permite la navegacion sobre lso diferentes escritorios
	 * en caso de que se implementan mas de uno
	 */
	protected BarraEscritorio barraEscritorio;

	/**
	 * Menu de la ventana la cual presenta las opciones sobre las cuales se 
	 * puede navegar en la aplicacion.
	 */
	protected Menu menu ;
	
	public EstadistecVentana() throws HeadlessException 
	{	
		/*
		 * cargar el titulo y dimension de la ventana
		 */
		super(TITULO_APLICACION);
		this.setSize(CONFIG.cargarDimension("RESOLUCION"));
		this.setLocationRelativeTo(null);
	
		
		/*
		 * Creando el SuperGestor, el escritorio logico y
		 * a partir de ahi el escritorio grafico.
		 */
		
		 _superGestor = SuperGestor.getInstancia();

		 LEscritorio lEscritorio = _superGestor.crearLEscritorio();
		 
		 _gEscritorio = new GEscritorio(lEscritorio);
		 lEscritorio.setGEscritorio(_gEscritorio);
		 _gEscritorio.setVisible(true);
		 		 
		
		/*
		 * Barra de herramientas
		 */
		 
		 barraHerramientas = new BarraHerramientas();
		 barraHerramientas.iniciar();
		 barraHerramientas.setLayout(null);

		 
		/*
		 * Barra de escritorio
		 */
		 barraEscritorio = new BarraEscritorio();
		 barraEscritorio.iniciar();
		

		 
		 /*
		  * Menu de la ventana
		  */
		 menu = new Menu();
		 menu.iniciar();
		 
			 
		 /*
		  * Agregar Componentes
		  */
		 
		 this.add( barraHerramientas,"North" );
	     this.add( barraEscritorio, "South");
	     this.add( _gEscritorio,"Center" );
	     this.setSize(700,500 );
	     this.setVisible( true );
			
		 this.setJMenuBar(menu);
		 this.setLocation(100,25);
		 this.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

	
	/**
	 * Método para hacer visible la ventana
	 */
	public void iniciar()
	{
	  this.setVisible(true);
	}
	
	/**
	 * Método para hacer invisible la ventana
	 */
	public void terminar()
	{
	  this.setVisible(false);
	}

	public void vetoableChange(PropertyChangeEvent evt)
		throws PropertyVetoException 
		{
		
	    }   
	}

